%include	'Macros.inc'
cr	equ	0Dh			;������� �������
lf	equ	0Ah			;������� ������
	org	100h
Start:	jmp	Begin
;	������ ���������
Lname0	db	81 			;������������ ����� ����� �����
Lname	db	0			;����������� ����� ����� �����
Namefile times	81	db	0	;��� �����
Lognum	dw	0			;���������� ����� �����
OneSymb	db	0
;-----------------------------------------------------------------------

;
;	������� ���� ���������
;	-----------------------------------------
;
Begin:
;���� ������ ����� �����
	call	Clear_screen		;������� ������
	Out_str	QuestNameFile		;������ �� ����� �����
	mov	ah,0ah			;������� ����� ������
	mov	dx,Lname0		;DX <- �����-�������� ������ �����
	int	21h			;���� ������
	call	Send_crlf		;������� ������
	xor	bx,bx			;BX <- 0
	mov	bl,[Lname]		;BX <- ����� ����� �����
	cmp	bx,0			;���� ��� ����� �� �������
	je	.Exit			; �� �����
	mov	[Namefile+bx],byte 0	;������ �������� �����
;�������� �����
	mov	ah,3dh			;��������
	mov	dx,Namefile		; �����
	mov	al,2			; ��
	int	21h			; ������ � ������
	jnc	.M1			;���� �������
	Out_str	ErrorOpenFile		;��������� �� ������ �������� �����
	call	Send_crlf		;������� ������
	call	Read_byte		;���� �������
	jmp	.Exit			;�����
.M1:    mov	[Lognum],ax		;���������� �����. ������ �����
;��������� ��������� �� ����� �����
	mov	ah,42h			;������� ��������� ��������� �����
	mov	bx,[Lognum]		;BX <- �����. ����� �����
	mov	al,2			;AL <- 1 - ����������� ������������ �����
	xor	cx,cx			;�������� ����������� (������� �����)
	xor	dx,dx		        ; � ������ (������� �����)
	int	21h			;�����������
	jnc	.M2			;���� �������
	Out_str	ErrorReadFile		;��������� �� ������ ������
	call	Send_crlf		;������� ������
	call	Read_byte		;���� �������
	jmp	.Exit			;�����
;������ � ���� ����� ��������� ���������
.M2:	xor	ax,ax			;AX <- 0	
	xor	di,di			;DI <- 0
.Next:	mov	bx,[AdrEnv]	     	;�������� � DS
	mov	ds,bx			; �����-������� ����� ���������
	mov	al,[di]			;�������� ��������� ������
	cmp	al,0			;��������� �� 0
	jnz	.M3             	;������ �� 0
	mov	al,[di+1]		;�������� ��������� ����� 0 ������
	cmp	al,0			;��������� �� 0
	jz	.M4			;���� ��� ������� 0 �� �������
	mov	al,0			;���� ���� ������ 0 �� ������� �� �����
.M3:	inc	di			;����������� DI �� 1
	mov	bx,es		     	;�������� � DS
	mov	ds,bx			; ES
	mov	[OneSymb],ax		;�������� ������ � �����
	mov	ah,40h			;������� ������ � �����
	mov	bx,[Lognum]		;BX <- �����. ����� �����
	mov	cx,1			;����� ������ ������������ � ����
	mov	dx,OneSymb	        ;����� ���������� �������� ����� �������� � ����
	int	21h			;������ � ����� �� �����
	jnc	.Next			;���� �������
	Out_str	ErrorWriteFile		;��������� �� ������ ������
	call	Send_crlf		;������� ������
	call	Read_byte		;���� �������
	jmp	.Exit			;�����
;������ � ���� �������� cr � lf
.M4:    mov	bx,es		     	;�������� � DS
	mov	ds,bx			; ES
	mov	[OneSymb],byte cr		;�������� ������ � �����
	mov	ah,40h			;������� ������ � �����
	mov	bx,[Lognum]		;BX <- �����. ����� �����
	mov	cx,1			;����� ������ ������������ � ����
	mov	dx,OneSymb	        ;����� ���������� �������� ����� �������� � ����
	int	21h			;������ � ����� �� �����
	jnc	.M5			;���� �������
	Out_str	ErrorWriteFile		;��������� �� ������ ������
	call	Send_crlf		;������� ������
	call	Read_byte		;���� �������
	jmp	.Exit			;�����
.M5:	mov	[OneSymb],byte lf		;�������� ������ � �����
	mov	ah,40h			;������� ������ � �����
	mov	bx,[Lognum]		;BX <- �����. ����� �����
	mov	cx,1			;����� ������ ������������ � ����
	mov	dx,OneSymb	        ;����� ���������� �������� ����� �������� � ����
	int	21h			;������ � ���� �� ������
	jnc	.M6			;���� �������
	Out_str	ErrorWriteFile		;��������� �� ������ ������
	call	Send_crlf		;������� ������
	call	Read_byte		;���� �������
	jmp	.Exit			;�����
;������ � ���� ������ ���������
.M6:	xor	cx,cx			;��������� CX
	mov	cl,[Lparam]		;CL <- ����� ������
	cmp	cx,0			;����� �����������?
	jz	.M8			;���� ��
	xor	si,si			;SI <- 0
.Loop:	xor	ax,ax			;AX <- 0
	mov	al,[Param+si]		;����� ����������
	mov	[OneSymb],ax		;�������� ������ � �����
	mov	ah,40h			;������� ������ � �����
	mov	bx,[Lognum]		;BX <- �����. ����� �����
	mov	di,cx			;DI <- CX
	mov	cx,1			;����� ������ ������������ � ����
	mov	dx,OneSymb	        ;����� ���������� �������� ����� �������� � ����
	int	21h			;������ � ���� �� ������
	jnc	.M7			;���� �������
	Out_str	ErrorWriteFile		;��������� �� ������ ������
	call	Send_crlf		;������� ������
	call	Read_byte		;���� �������
	jmp	.Exit			;�����
.M7:	inc	si
	mov	cx,di			;CX <- DI
	loop	.Loop			;��������� ��� ����. �������
;��������� ��������� �� ������ �����
.M8:	mov	ah,42h			;������� ��������� ��������� �����
	mov	bx,[Lognum]		;BX <- �����. ����� �����
	mov	al,0			;AL <- 0 - ����������� ������������ ������
	xor	cx,cx			;�������� ����������� (������� �����)
	xor	dx,dx		        ; � ������ (������� �����)
	int	21h			;�����������
	jnc	.M9			;���� �������
	Out_str	ErrorReadFile		;��������� �� ������ ������
	call	Send_crlf		;������� ������
	call	Read_byte		;���� �������
	jmp	.Exit			;�����
;������ �� �����
.M9:	mov	ah,3fh			;������� ������ �� �����
	mov	bx,[Lognum]		;BX <- �����. ����� ��������� �����
	mov	cx,1			;CX <- ����� �������� ������
	mov	dx,OneSymb              ;DX <- �����-�������� ������
	int	21h			;������ �� ����� � �����
	jnc	.M10			;���� �������
	Out_str	ErrorReadFile		;��������� �� ������ ������
	call	Send_crlf		;������� ������
	call	Read_byte		;���� �������
	jmp	.Exit			;�����
.M10:	cmp	ax,0			;��������� �� ����� �����
	je	.Exit
	mov	dl,[OneSymb]		;�������� ������ � DX
	call	Write_char		;������� ������ �� �����
	jmp	.M9
;�����
.Exit:	mov	ax,4c00h
	int	21h			;������� � DOS
QuestNameFile	db	'Enter file name: $'
ErrorOpenFile	db	'Error open file $'
ErrorReadFile	db	'Error read file $'
ErrorWriteFile	db	'Error write file $'
;
;	������� ������ ������
;	---------------------
;
Send_crlf:
	push	ax
	push	dx
	mov	ah,2 		;������� ������
	mov	dl,cr		;��������� ������
	int	21h		;����� �������
	mov	dl,lf
	int	21h		; -"-
	pop	dx
	pop	ax
	ret
;
;	������� ������
;	--------------
;
Clear_screen:
	push	ax
	push	bx
	push	cx
	push	dx
	xor	al,al		;�������� ��� ����
	xor	cx,cx		;������� ����� ���� � (0,0)
	mov	dh,49		;������ ������ ������ - 49
	mov	dl,79		;������ ������� � 79 �������
	mov	bh,7		;��������� ���������� ��������
	mov	ah,6		;��������
	int	10h		; ����
	xor	dl,dl		;������� ����������
	xor	dh,dh		; �������
	xor	bx,bx		;������� �������������
	xor	al,al		;���������
	mov	ah,2		; �������
	int	10h		; � �������� �����
	pop	dx
	pop	cx
	pop	bx
	pop	ax
	ret
;
;	��������� ��� ������� � ����������
;	----------------------------------
; �����: AL - ��� ASCII ������� (0 - ����������� ������)
;	 AH - ����-��� �������
;
Read_byte:
	mov	ah,0		;���� �������
	int	16h		; ��� ���
	ret
;
;	����� ������� �� �����
;	----------------------
; �����: DL �������� ��� �������, ���������� �� �����
;
Write_char:
	push	ax
	mov	ax,0200h		;������� ������ �������
	int	21h			;����� ������� �� �����
	pop	ax
	ret
	absolute 2ch			;��������� ���� ����� �����-�������� 2Ch
AdrEnv	resb	2			;�����-������� ����� ���������
	absolute 80h			;��������� ���� ����� �����-�������� 80h
Lparam	resb	1			;����� ������ �������
Param	resb	1			;������ ���� ������
